import pandas as pd
from factor_analyzer import FactorAnalyzer

# import sys
# sys.path.append('D:/gitee/python-script-new/papertools/')

file_path = 'dest/20231106-101631_truncatedNew.xlsx'
sheet_name = 'highlyCorrelatedReduced'

# sheetFilled
file_path = 'dest/20231202-225633_truncatedNew.xlsx'
# file_path = 'dest/20231129-135223_truncatedNew.xlsx'

sheet_name = 'sheet3Filled'

def main_factor_analyze(file_path,sheet_name,factors_num=5):

    dataset = pd.read_excel(file_path, sheet_name=sheet_name)

    # 创建一个因子分析对象并指定因子数量和最大方差法旋转
    # 按照给定的个数提取因子
    fa = FactorAnalyzer(factors_num, rotation='quartimin', method='principal')  # 选择主成分法进行提取，quartimin 旋转方法
    fa.fit(dataset)  # 进行因子分析

    # 获取旋转后的因子载荷矩阵
    rotated_loadings = fa.loadings_  # 这里的载荷矩阵可能是经过旋转的（视所选的旋转方法而定）

    # 打印旋转后的因子载荷矩阵
    # print("旋转后的因子载荷矩阵：")
    # print(rotated_loadings)

    # 获取每个变量的方差解释比（communalities）
    communalities = fa.get_communalities()

    # 获取因子方差解释比
    factor_variance = fa.get_factor_variance()

    # 打印每个变量的方差解释比（communalities）
    print("\n每个变量的方差解释比：")
    print(communalities)

    # 打印因子方差解释比
    print("\n因子方差解释比：")
    print(factor_variance)

    # 根据因子载荷矩阵和方差解释比来输出建议的维度及其包含的变量
    print("建议的维度及其包含的变量：")
    for i in range(factors_num):
        factor_loading = rotated_loadings[:, i]
        relevant_variables = [dataset.columns[j] for j in range(len(factor_loading)) if abs(factor_loading[j]) > 0.5]  # 举例阈值为0.5，您可以根据实际情况调整
        print(f"维度 {i+1}: 包含变量 {relevant_variables}")

if __name__ == "__main__":
    main_factor_analyze(file_path,sheet_name)